package com.xs.calculator2;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView tv_result;
    //第一个操作数
    private String firstNum = "";
    //运算符
    private String op = "";
    //第二个操作数
    private String secondNum = "";
    //当前的计算结果
    private String result = "";
    //显示的文本内容
    private String showText = "";



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //从布局文件中获取名叫tv_result的文本视图
        tv_result = findViewById(R.id.tv_result);

        //给每个按钮都注册了点击监听器
        findViewById(R.id.btn_cancel).setOnClickListener(this);
        findViewById(R.id.btn_chu).setOnClickListener(this);
        findViewById(R.id.btn_cheng).setOnClickListener(this);
        findViewById(R.id.btn_qing).setOnClickListener(this);
        findViewById(R.id.btn_7).setOnClickListener(this);
        findViewById(R.id.btn_8).setOnClickListener(this);
        findViewById(R.id.btn_9).setOnClickListener(this);
        findViewById(R.id.btn_jia).setOnClickListener(this);
        findViewById(R.id.btn_4).setOnClickListener(this);
        findViewById(R.id.btn_5).setOnClickListener(this);
        findViewById(R.id.btn_6).setOnClickListener(this);
        findViewById(R.id.btn_jian).setOnClickListener(this);
        findViewById(R.id.btn_1).setOnClickListener(this);
        findViewById(R.id.btn_2).setOnClickListener(this);
        findViewById(R.id.btn_3).setOnClickListener(this);
        findViewById(R.id.btn_reciprocal).setOnClickListener(this);
        findViewById(R.id.btn_0).setOnClickListener(this);
        findViewById(R.id.btn_point).setOnClickListener(this);
        findViewById(R.id.btn_deng).setOnClickListener(this);
        findViewById(R.id.btn_sqrt).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        String inputText;
        //如果是开根号按钮
        if(v.getId() == R.id.btn_sqrt){
            inputText = "√";
        }else{
            //除了开根号之外的其他按钮
            inputText = ((TextView)v).getText().toString();
        }
        switch (v.getId()){
            //点击了清除按钮
            case R.id.btn_qing:
                clean();
                break;
            //点击了取消按钮
            case R.id.btn_cancel:
                break;
            //点击了加减乘除按钮
            case R.id.btn_jia:
            case R.id.btn_jian:
            case R.id.btn_cheng:
            case R.id.btn_chu:
                op = inputText;//运算符
                refreshText(showText + op);//显示运算符
                break;
            //点击了等号按钮
            case R.id.btn_deng:
                //加减乘除四则运算
                double calculate_result = calculateFour();
                //将上一步运算结果保存，实现累加
                refreshOperate(String.valueOf(calculate_result));
                refreshText(showText + "=" + result);
                break;
            //点击了开根号按钮
            case R.id.btn_sqrt:
                //开平方运算
                double sqrt_result = Math.sqrt(Double.parseDouble(firstNum));
                refreshOperate(String.valueOf(sqrt_result));
                refreshText(showText + "√=" + result);
                break;
            //点击了求倒数按钮
            case R.id.btn_reciprocal:
                double reciprocal_result = 1.0 / Double.parseDouble(firstNum);
                refreshOperate(String.valueOf(reciprocal_result));
                refreshText(showText + "/=" + result);
                break;
            //点击了其他按钮，包括数字和小数点
            default:
                //上次的运算结果已经出来了,并且没有输入操作符
                if(result.length() > 0 && op.equals("")){
                    //清空
                    clean();
                }

                //没有运算符，则继续拼接第一个操作数
                if(op.equals("")){
                    firstNum = firstNum + inputText;
                }else {
                    //有运算符，则继续拼接第二个操作数
                    secondNum = secondNum + inputText;
                }

                //整数前面不需要0
                if(showText.equals("0") && inputText.equals(".")){
                    refreshText(inputText);
                }else {
                    refreshText(showText + inputText);
                }


                break;

        }
    }

    //加减乘除四则运算，返回计算结果
    private double calculateFour() {
        switch (op){
            case "+":
                return Double.parseDouble(firstNum) + Double.parseDouble(secondNum);
            case "-":
                return Double.parseDouble(firstNum) - Double.parseDouble(secondNum);
            case "*":
                return Double.parseDouble(firstNum) * Double.parseDouble(secondNum);
            case "/":
                return Double.parseDouble(firstNum) / Double.parseDouble(secondNum);

        }
        return 0;
    }

    //清空并初始化
    private void clean() {
        refreshOperate("");
        refreshText("");
    }

    //刷新运算结果
    private void refreshOperate(String new_result){
        result = new_result;
        firstNum = result;
        secondNum = "";
        op = "";
    }

    //刷新文本显示
    private void refreshText(String text){
        showText = text;
        tv_result.setText(showText);
    }

}
